Amazon RedshiftとAmazon RDS for MySQLとのゼロETL統合が一般提供開始したのでやってみた
こんにちは。まるとです。
2024/9/12にAmazon RedshiftとAmazon RDS for MySQLとのゼロETL統合が一般提供開始する発表があったので、改めて実際にやってみたいと思います。(今まではプレビュー版扱いでした。)
先に結論
- ゼロETL統合により自動でデータウェアハウスにデータを取り込むことが可能に!
- 自動で連携を行うことで人の手を介さなくなるため、正確かつ効率にデータの取り込みが可能に!
実際にやってみる
今回構築するもの・要件
すごくシンプルな図ですが、今回構築するものを以下に示します。
また、Amazon RDSのDBエンジンにはMySQLを使用します。
これはAmazon RDSでサポートするDBエンジンがRDS for MySQL 8.0のみだからです。
※Amazon AuroraだとAurora MySQL version 3、プレビュー版ですがAurora PostgreSQL (compatible with PostgreSQL 15.4 and Zero-ETL Support)で利用できます。
Amazon RDS パラメータグループの作成・設定
Amazon RDSの作成前に、ゼロETLの要件を満たすようにパラメータグループの作成・設定してきます。
パラメータグループはAmazon RDSのサイドバー、「パラメータグループ」から作成できます。
パラメータグループを作成する際は以下の設定値にします。
※記載がないものは任意の値を設定
項目名 | 設定値 |
---|---|
エンジンのタイプ | MySQL Community |
パラメータグループファミリー | mysql8.0 |
タイプ | DB Parameter Group |
続いて、公式ドキュメントに記載の通り、一部のパラメータを変更します。
今回変更する項目は、binlog_format
とbinlog_row_image
です。
binlog_format
はROW
、binlog_row_image
はfull
に変更します。
Amazon RDSの作成
続いて、データソースとなるAmazon RDSの作成を行います。
要件にも記載した通り、DBエンジンにはMySQL、エンジンバージョンは8.0系を選択します。
また、データベース作成の際、「追加設定 > DBパラメータグループ」より、先ほど作成したパラメータグループを指定します。
以上でAmazon RDSの作成は完了です。
Amazon Redshiftパラメータグループの作成・設定
Amazon RedshiftでもAmazon RDSと同様に特定のパラメータを変更する必要があります。
そのため、まずは「設定 > ワークロード管理」よりパラメータグループの作成、パラメータの変更を行います。
パラメータグループを作成したら、enable_case_sensitive_identifier
というパラメータをtrue
に変更します。
これでパラメータグループの準備は完了です。
Amazon Redshiftクラスターの作成
それでは、実際にデータウェアハウスとなるAmazon Redshiftクラスターを作成していきます。
サイドバーにある「クラスター」を選択後、オレンジ色のボタン「クラスターを作成」から行います。
Zero-ETL統合を利用するには以下の要件を満たす必要があります。
- 最低2ノードを保有するRA3ノード、またはRedshift Serverless
- プロビジョニングされたクラスターの場合、暗号化が有効になっていること
この要件に沿って、クラスターを作成します。
これでAmazon Redshiftクラスターの作成は完了です。
Zero-ETL統合の設定
データソースとなるAmazon RDS、データの統合先であるデータウェアハウスAmazon Redshiftの作成が完了したので、早速Zero-ETL統合の設定を行なっていきます。
まず初めにZero-ETL統合を作成するための権限を付与します。
作成したAmazon Redshiftクラスターのプロパティ内にある「リソースポリシー」で承認されたプリンシパル
、承認された統合ソース
を設定します。
承認されたプリンシパル
にはAWSアカウントIDやIAMロールのARNなどを追加します。
承認された統合ソース
には今回作成したAmazon RDSのARNを追加します。
続いて、「Amazon RDS > データベース > ゼロETLの統合」から設定を作成します。
途中、ソースとターゲットを聞かれるので、今回作成したAmazon RDS、Amazon Redshiftを選択していきます。
その他の設定項目は、今回検証を目的としているのでデフォルト値を使用します。
※本番環境で利用する際は、適切な値を設定してください。
この設定が完了するとゼロETLの統合の設定が開始されます。(状況によりますが、検証時には30〜45分かかりました)
ただ、このままではデータの送信先となるターゲット(Amazon Redshift)側に連携用のデータベースがないため、警告が表示されます。
そのため、Amazon Redshiftクラスターでクエリを実行し、統合先となるデータベースを作成してあげます。
データベースを作成するにはクエリエディタでクラスターに接続し、以下のクエリを実行します。
CREATE DATABASE <統合先のデータベース名> FROM INTEGRATION '統合ID';
※統合IDは以下のクエリを実行するか、AWSマネジメントコンソールから確認できます。
SELECT integration_id FROM SVV_INTEGRATION;
クエリが正常に実行できたらAmazon RDSとAmazon Redshiftの統合(分かりやすい単語だと、連携)は完了です。
※Amazon RedshiftのゼロETL統合でも警告が消え、アクティブになればOKです。(表示が切り替わるまでちょっと時間がかかります)
実際にゼロETL統合が動いているか確認する
それでは実際にソースとなるAmazon RDSにデータを挿入し、ゼロETL統合を通してAmazon Redshift側にデータが反映されていることを確認します。
Amazon RDSに接続して、データベース、テーブルを作成後、実際にデータを挿入します。
CREATE DATABASE testDb;
USE testDb;
CREATE TABLE testTable (
ID int NOT NULL PRIMARY KEY,
Note VARCHAR(64) NOT NULL
);
INSERT INTO testTable VALUES (1, 'Hello Zero ETL World!');
INSERT INTO testTable VALUES (2, 'This is amazing.');
上記のクエリをAmazon RDS側で実施したら、今度はAmazon Redshift側のクエリエディタでSELECT
を実行します。
できた!!!
終わりに
ゼロETL統合自体は昨年開催されたAWS re:Invent 2023で発表されたものですが、ついにAmazon RDS for MySQLとの統合が一般提供となりました!
これにより、簡単に連携、自動でデータをデータウェアハウスに取り込むことができるので、かなり楽になるのではないかなと思います。
参考文献